package KC;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;

import jxl.Sheet;
import jxl.Workbook;
import KC.cimaV2.*;

public class EntradaUnidad {
	
	private final static String VOID 						= "";
	private static java.util.Calendar         cal_hoy     	= java.util.Calendar.getInstance( );
	private static java.text.SimpleDateFormat sdf         	= new java.text.SimpleDateFormat( "yyyy/MM/dd" );
	private static java.text.SimpleDateFormat sdfSP       	= new java.text.SimpleDateFormat( "dd/MM/yyyy" );
	private static java.text.SimpleDateFormat sdfHoras    	= new java.text.SimpleDateFormat( "hh:mm:ss" );
	private static java.text.NumberFormat     nf          	= java.text.NumberFormat.getInstance(  );{
		nf.setMaximumFractionDigits(2);
		nf.setMinimumFractionDigits(2);
	}
	
	
	/**
	 * 
	 * 
	 * @param byte_archivo
	 * @throws Exception
	 */
	public static java.util.ArrayList entrada_unidad(
						java.sql.Connection ConnRs, 
						java.sql.Connection ConnRsInf,
						int int_almacenDestino,
						byte[] byte_archivo) throws Exception{
		
		boolean bool_inserta = true;
		
		String str_id_unidad;
		String str_iniciales;
		String str_numero;
		String str_numero_guia;
		String str_recepcion;
		String str_ticket_destino;
		String str_peso_destino;
		String str_humedad_destino;
		String str_ubicacion;
		String str_observacion_sellos;
		String str_observacion;
		String str_fecha_analisis;
		String str_grano_danado;
		String str_impurezas;
		String str_plagaviva;
		String str_afaltoxinas;
		String str_temperatura;
		String str_sellos_origen;
		String str_peso_origen;
		String str_humedad_origen;
		String str_fecha_documento;
		String str_origen;
		
		ByteArrayInputStream  byte_is 	= new ByteArrayInputStream(byte_archivo);
		Workbook libro 					= Workbook.getWorkbook(byte_is);
		Sheet hoja     					= libro.getSheet(0);
		
		int int_fila = hoja.getRows();	
		
		java.util.ArrayList arrL_unidades = new java.util.ArrayList();
		for(int int_i = 1; int_i<int_fila; int_i++){
			
			java.util.Map map_unidad = new java.util.HashMap(); 
			
			str_id_unidad 			= hoja.getCell(0,  int_i).getContents();
			str_iniciales 			= hoja.getCell(1,  int_i).getContents();
			str_numero 				= hoja.getCell(2,  int_i).getContents();
			str_numero_guia 		= hoja.getCell(3,  int_i).getContents();
			str_recepcion 			= hoja.getCell(4,  int_i).getContents();
			str_ticket_destino 		= hoja.getCell(5,  int_i).getContents();
			str_peso_destino 		= hoja.getCell(6,  int_i).getContents();
			str_humedad_destino 	= hoja.getCell(7,  int_i).getContents();
			str_ubicacion 			= hoja.getCell(8,  int_i).getContents();
			str_observacion_sellos 	= hoja.getCell(9,  int_i).getContents();
			str_observacion 		= hoja.getCell(10, int_i).getContents();
			str_fecha_analisis 		= hoja.getCell(11, int_i).getContents();
			str_grano_danado 		= hoja.getCell(12, int_i).getContents();
			str_impurezas 			= hoja.getCell(13, int_i).getContents();
			str_plagaviva 			= hoja.getCell(14, int_i).getContents();
			str_afaltoxinas 		= hoja.getCell(15, int_i).getContents();
			str_temperatura 		= hoja.getCell(16, int_i).getContents();
			str_sellos_origen 		= hoja.getCell(17, int_i).getContents();
			str_peso_origen 		= hoja.getCell(18, int_i).getContents();
			str_humedad_origen 		= hoja.getCell(19, int_i).getContents();
			str_fecha_documento 	= hoja.getCell(20, int_i).getContents();
			str_origen 				= hoja.getCell(21, int_i).getContents();

			
			
			map_unidad.put("str_id_unidad", 			str_id_unidad				);
			map_unidad.put("str_iniciales", 			str_iniciales				);
			map_unidad.put("str_numero", 				str_numero					);
			map_unidad.put("str_numero_guia", 			str_numero_guia				);
			map_unidad.put("str_recepcion", 			str_recepcion				);
			map_unidad.put("str_ticket_destino", 		str_ticket_destino			);
			map_unidad.put("str_peso_destino", 			str_peso_destino			);
			map_unidad.put("str_humedad_destino", 		str_humedad_destino			);
			map_unidad.put("str_ubicacion", 			str_ubicacion				);
			map_unidad.put("str_observacion_sellos", 	str_observacion_sellos		);
			map_unidad.put("str_observacion", 			str_observacion				);
			map_unidad.put("str_fecha_analisis", 		str_fecha_analisis			);
			map_unidad.put("str_grano_danado", 			str_grano_danado			);
			map_unidad.put("str_impurezas", 			str_impurezas				);
			map_unidad.put("str_plagaviva", 			str_plagaviva				);
			map_unidad.put("str_afaltoxinas", 			str_afaltoxinas				);
			map_unidad.put("str_temperatura", 			str_temperatura				);
			map_unidad.put("str_sellos_origen", 		str_sellos_origen			);
			map_unidad.put("str_peso_origen", 			str_peso_origen				);
			map_unidad.put("str_humedad_origen", 		str_humedad_origen			);
			map_unidad.put("str_fecha_documento", 		str_fecha_documento			);
			map_unidad.put("str_origen", 				str_origen					);
			map_unidad.put("bool_inserta", 				new Boolean(bool_inserta) 	);
			
			arrL_unidades.add(map_unidad); 
		}
		return arrL_unidades;
	}
	
	
	
	/**
	 * 
	 * @param ConnRs
	 * @param ConnRsInf
	 * @param int_almacenDestino
	 * @param arrL_unidades
	 * @return
	 * @throws Exception
	 */
	public static java.util.ArrayList guarda_entrada(
				java.sql.Connection ConnRs, 
				java.sql.Connection ConnRsInf,
				int int_almacenDestino,
				java.util.ArrayList arrL_unidades ) throws Exception{
		java.util.ListIterator lit_unidades = arrL_unidades.listIterator();
		java.util.Map map_unidad = null;
		
		java.util.ArrayList arrL_retVal = new ArrayList();
		
		String str_msg = "";
		int	int_grabInf = 0;
		int int_tranInf = 0;
		int int_idMov 	= 0;
		String str_usuario = "";
		
		String str_datTranInformix = 
			" SELECT id_movim,          "+
			"	     trans_inf,         "+
			"        grabar_informix,   "+
			"        cod_planta,        "+
			"        inf_prefijo,       "+
			"        inf_tipo_mov,      "+
			"        inf_aplicacion,    "+
			"        inf_unidad,        "+
			"        inf_compania       "+
			" FROM 	 tipo_movimiento,   "+
			"	     parametro          "+
			" where	 id_movim = entrada ";
		java.sql.Statement stmt_datTranInformix = ConnRs.createStatement( );
		java.sql.ResultSet rs_datTranInformix   = stmt_datTranInformix.executeQuery( str_datTranInformix );
	
		String str_prefijo    =	"01";
		String str_tipoMovInf =	"0";
		String str_aplicacion =	VOID;
		String str_unidad_par =	VOID;
		String str_compania   =	VOID;

		if( rs_datTranInformix.next( ) ){
			int_idMov     = rs_datTranInformix.getInt( "id_movim" );
			int_tranInf   = rs_datTranInformix.getInt( "trans_inf" );
			int_grabInf   = rs_datTranInformix.getInt( "grabar_informix" );
			
			str_prefijo = rs_datTranInformix.getString("inf_prefijo");
			str_prefijo = str_prefijo!=null && !str_prefijo.equals("")?str_prefijo:"01";
			
			str_tipoMovInf = rs_datTranInformix.getString("inf_tipo_mov");
			str_tipoMovInf = str_tipoMovInf!=null && !str_tipoMovInf.equals("")?str_tipoMovInf:"0";
			
			str_aplicacion = rs_datTranInformix.getString("inf_aplicacion");
			str_aplicacion = str_aplicacion!=null && !str_aplicacion.equals("")?str_aplicacion:"";
			
			str_unidad_par = rs_datTranInformix.getString("inf_unidad");
			str_unidad_par = str_unidad_par!=null && !str_unidad_par.equals("")?str_unidad_par:"";
			
			str_compania = rs_datTranInformix.getString("inf_compania");
			str_compania = str_compania!=null && !str_compania.equals("")?str_compania:"";
		}
		rs_datTranInformix.close();
		stmt_datTranInformix.close();
		
		String   str_codigoOrigen      			= VOID;
		String   str_recepcion      			= VOID;
		String   str_unidad         			= VOID;
		java.util.Calendar cal_recepcion      	= null;
		String   str_ticket         			= VOID;
		String   str_peso           			= VOID;
		String   str_humedad        			= VOID;
		String   str_ubicacion      			= VOID;
		String   str_tipo_grano     			= VOID;
		String   str_obsSellos      			= VOID;
		String   str_observ         			= VOID;
		String   str_FechaA         			= VOID;
		java.util.Calendar cal_FechaA         	= null;
		String   str_grano_daniado  			= VOID;
		String   str_impureza       			= VOID;
		String   str_plaga_viva 				= VOID;
		String   str_aflatoxina     			= VOID;
		String   str_temperatura    			= VOID;
		boolean  rowEven            			= true;

		if( 1 > 0 ){
			while( lit_unidades.hasNext()) {
				map_unidad = (java.util.Map)lit_unidades.next();
				
				str_codigoOrigen 	= (String)map_unidad.get("str_origen"				);
				str_unidad 			= (String)map_unidad.get("str_id_unidad"			);
				str_ticket 			= (String)map_unidad.get("str_ticket_destino"		);
				str_peso 			= (String)map_unidad.get("str_peso_destino"			);
				str_humedad 		= (String)map_unidad.get("str_humedad_destino"		);
				str_ubicacion 		= (String)map_unidad.get("str_ubicacion"			);
				str_obsSellos 		= (String)map_unidad.get("str_observacion_sellos" 	);
				str_observ 			= (String)map_unidad.get("str_observacion"			);
				str_FechaA			= (String)map_unidad.get("str_fecha_analisis"		);
				str_grano_daniado 	= (String)map_unidad.get("str_grano_danado"			);
				str_plaga_viva 		= (String)map_unidad.get("str_plagaviva"			);
				str_aflatoxina 		= (String)map_unidad.get("str_afaltoxinas"			);
				str_temperatura 	= (String)map_unidad.get("str_temperatura"			);
				str_recepcion		= (String)map_unidad.get("str_recepcion"			);
				rowEven = !rowEven;
				
				str_unidad        = str_unidad       !=null&&!str_unidad.       equals(VOID)?str_unidad       :"0";
				str_peso          = str_peso         !=null&&!str_peso.         equals(VOID)?str_peso         :"0";
				str_grano_daniado = str_grano_daniado!=null&&!str_grano_daniado.equals(VOID)?str_grano_daniado:"0";
				str_impureza      = str_impureza     !=null&&!str_impureza.     equals(VOID)?str_impureza     :"0";
				str_aflatoxina    = str_aflatoxina   !=null&&!str_aflatoxina.   equals(VOID)?str_aflatoxina   :"0";
				str_temperatura   = str_temperatura  !=null&&!str_temperatura.  equals(VOID)?str_temperatura  :"0";
				
				str_ticket        = str_ticket       !=null                               ?str_ticket       :  VOID;
				str_plaga_viva    = str_plaga_viva   !=null                               ?"1"              : "0";
				str_peso          = str_peso         !=null                               ?str_peso         :  VOID;
				str_humedad       = str_humedad      !=null                               ?str_humedad      :  VOID;
				str_ubicacion     = str_ubicacion    !=null                               ?str_ubicacion    :  VOID;
				
				str_obsSellos     = str_obsSellos.replaceAll("\n",".");
				str_observ        = str_observ.   replaceAll("\n",".");
				
				if( str_FechaA != null && !str_FechaA.equals("") ){
					cal_FechaA = java.util.Calendar.getInstance( );
					cal_FechaA.setTime( sdfSP.parse( str_FechaA ) );
				}
				if( str_recepcion != null && !str_recepcion.equals("") ){
					cal_recepcion = java.util.Calendar.getInstance( );
					cal_recepcion.setTime( sdfSP.parse( str_recepcion ) );
				}
				
				/**
				 * Para ver estatus de la recepcion 
				 * status == 0  : Entrada sin modificacion 
				 * status == 1  : Entrada con error al guardar 
				 * status == 2  : Entrada guardo exitosamente 
				 */
				
				int    status  = 0;
				String mensaje = VOID;
				/**
				 * Fin Para ver estatus de la recepcion
				 */
				
				
				boolean cambioGrano = false;
				
				String str_datUnidad = 
					" SELECT inicial,         				" +
					"        ticket_destino,  				" +
					"        numero,          				" +
					"        humedad_origen,  				" +
					"        humedad_destino, 				" +
					"        vista_unidad.ubicacion,       	" +
					"        peso_destino,    				" +
					"        no_guia,         				" +
					"        observaciones,   				" +
					"        peso_origen,     				" +
					"	     almacen_origen,  				" +				
					"	     codigo_lote,     				" +
					"	     id_lote,         				" +
					"	     tipogra_lote,    				" +
					"	     pesoun_lote,     				" +
					"	     status,          				" +
					"	     codigo_ao,       				" +
					"	     inv_ubicacion,   				" +
					"	     inv_lote,        				" +
					"	     trans_inf,       				" +
					"        alm_tipo,        				" +
					"        codbaan_lote,    				" +
					"        codbaan_tg       				" +
					" FROM   vista_unidad     				" +
					"             inner join almacen              on almacen_destino = id_almacen "+
					"             left  join vista_lote_tipograno on id_unidad       = unidad "+
					" WHERE  id_unidad    =   "+str_unidad;
				
				java.sql.Statement stmt_datUnidad = ConnRs.createStatement( );
				java.sql.ResultSet rs_datUnidad   = stmt_datUnidad.executeQuery( str_datUnidad );
				
				/**
				 * Datos de la unidad
				 */
				String str_inicial        = VOID;
				String str_ticketDestino  = VOID;
				String str_numero         = VOID;
				String str_humedadOrigen  = VOID;
				String str_humedadDestino = VOID;
				String str_ubicacionDestino = VOID;
				double dbl_pesoDestino    = 0;
				String str_noGuia         = VOID;
				String str_observaciones  = VOID;
				double dbl_pesoOrigen     =  0;
				int    int_almacenOrigen  =  0;
				String str_codigoLote     = VOID;
				int    int_idLote         =  0;
				int    int_idTipoGrano    =  0;
				double dbl_pesoUnLote     =  0;
				String str_status         = VOID;
				String str_codigoAlmacen  = VOID;
				int    int_almDestInvUbic =  0;
				int    int_almDestInvLote =  0;
				int    int_almDestTranInf =  0;
				int    int_almDestTipo    =  0;
				String str_CodigoBaaNLote = VOID;
				String str_CodigoBaaNTG   = VOID;
				/**
				 * Fin de Datos de la unidad
				 */
				
				if( rs_datUnidad.next( ) ){
				
					str_inicial        = rs_datUnidad.getString("inicial"        );
					str_ticketDestino  = rs_datUnidad.getString("ticket_destino" );
					str_numero         = rs_datUnidad.getString("numero"         );
					str_humedadOrigen  = rs_datUnidad.getString("humedad_origen" );
					str_humedadDestino = rs_datUnidad.getString("humedad_destino");
					str_ubicacionDestino = rs_datUnidad.getString("ubicacion"    );
					dbl_pesoDestino    = rs_datUnidad.getDouble("peso_destino"   );
					str_noGuia         = rs_datUnidad.getString("no_guia"        );
					str_observaciones  = rs_datUnidad.getString("observaciones"  );
					dbl_pesoOrigen     = rs_datUnidad.getDouble("peso_origen"    );
					int_almacenOrigen  = rs_datUnidad.getInt   ("almacen_origen" );
					str_codigoLote     = rs_datUnidad.getString("codigo_lote"    );
					int_idLote         = rs_datUnidad.getInt   ("id_lote"        );
					int_idTipoGrano    = rs_datUnidad.getInt   ("tipogra_lote"   );
					dbl_pesoUnLote     = rs_datUnidad.getDouble("pesoun_lote"    );
					str_status         = rs_datUnidad.getString("status"         );
					str_codigoAlmacen  = rs_datUnidad.getString("codigo_ao"      );
					int_almDestInvUbic = rs_datUnidad.getInt   ("inv_ubicacion"  );
					int_almDestInvLote = rs_datUnidad.getInt   ("inv_lote"       );
					int_almDestTranInf = rs_datUnidad.getInt   ("trans_inf"      );
					int_almDestTipo    = rs_datUnidad.getInt   ("alm_tipo"       );
					str_CodigoBaaNLote = rs_datUnidad.getString("codbaan_lote"   );
					str_CodigoBaaNTG   = rs_datUnidad.getString("codbaan_tg"     );
					
					if( str_ticketDestino == null || str_ticketDestino.equals(VOID) ){
						double dbl_porcentaje = (dbl_pesoUnLote*100)/dbl_pesoOrigen;
						str_codigoLote = str_codigoLote!=null   ?str_codigoLote:VOID;
						str_noGuia        = str_noGuia!=null?str_noGuia:VOID;
						str_humedadOrigen = str_humedadOrigen!=null?str_humedadOrigen:VOID;
						str_observaciones = str_observaciones!=null && !str_observaciones.equals(VOID)?str_observaciones:VOID;

						if (cal_recepcion != null && !str_ticket.equals(VOID) && !str_peso.equals("0") && !str_humedad.equals(VOID) && ( int_almDestInvUbic==0 || (int_almDestInvUbic==1 && !str_ubicacion.equals(VOID) ) ) ) {
							try{
								/**
								 * Inicio de transacciones en sql server
								 */
								java.sql.Statement stmt_guardarEntrada = ConnRs.createStatement( );
								
								/**
								 * Actualiza la unidad
								 * 
								 */
								String str_updateUnidad =
									" SET    language english "+
									" UPDATE unidad "+
									" SET 	 fecha_recepcion    = '"+sdf.format( cal_recepcion.getTime( ) )+"', "+
									"	     ticket_destino     = '"+str_ticket+"', "+
									"	     peso_destino       =  "+str_peso+" , "+
									"	     observ_dest        = '"+str_observ+"', "+
									"	     observ_dest_sellos = '"+str_obsSellos+"', "+
									"	     grano_daniado      =  "+str_grano_daniado+" , "+
									"	     impureza           =  "+str_impureza+" , "+
									"	     plaga_viva         =  "+str_plaga_viva+" , "+
									"	     aflatoxina         =  "+str_aflatoxina+" , "+
									"	     temperatura        =  "+str_temperatura+" , "+
									"	     fecha_analisis     =  "+(cal_FechaA!=null?"'"+sdf.format( cal_FechaA.getTime( ) )+"'":"null")+", "+
									"	     ubicacion          = '"+str_ubicacion+"', "+
									"	     humedad_destino    =  "+str_humedad+" , "+
									"	     status             = 'Recepcionado' "+
									" WHERE  id_unidad          =  "+str_unidad+"";

								stmt_guardarEntrada.addBatch( str_updateUnidad );
								/**
								 * Fin Actualiza la unidad
								 */
								
								
								/**
								 * Actualiza la existencia
								 */
								Almacen almacen = Almacen.getAlmacen(int_almacenDestino, ConnRs);
								Ubicacion ubicacion = Ubicacion.instancia(ConnRs.createStatement(), almacen, str_ubicacion, int_idLote);
								boolean bol_siGrano = Ubicacion.ubicacionGrano(ConnRs.createStatement(), int_almacenDestino, int_idTipoGrano);
								if(!almacen.tieneUbicaciones() && !bol_siGrano){
									mensaje = "Error: no existe ubicacion para maiz nacional.";
								}else if(!almacen.tieneUbicaciones()){
									ubicacion = null;
									ubicacion = Ubicacion.instancia(ConnRs.createStatement(), almacen, str_ubicacion, int_idLote, int_idTipoGrano);
								}
								if(!String.valueOf(int_idTipoGrano).equals(str_tipo_grano) && !bol_siGrano) {
									cambioGrano = true;
									mensaje = ubicacion.cambiarTipoGrano(stmt_guardarEntrada, int_idTipoGrano, int_idLote);
								}
								if(ubicacion.existencia()==null){
									Existencia.insertarEjecutando(ConnRs.createStatement(), ubicacion, int_idLote );
									ubicacion.estableceExistencia(Existencia.instancia(ConnRs.createStatement(), ubicacion, int_idLote));
								}
								ubicacion.existencia().actualiza(stmt_guardarEntrada, Double.parseDouble(str_peso.trim()));
														

						if(mensaje.equals(VOID)){
																		
								
							/**
							 * Actualiza el Lote_Unidad
							 */
								String str_actualizaLoteUnidad = 
									" UPDATE lote_unidad "+
									" SET    peso_dest = "+(Double.parseDouble(str_peso.trim())*(dbl_porcentaje/100))+" "+
									" WHERE  unidad    = "+str_unidad;

								stmt_guardarEntrada.addBatch( str_actualizaLoteUnidad );
								/**
								 * Fin Actuliza el Lote_Unidad
								 */
								
								/**
								 * Agregar movimiento de entrada
								 */
								String str_statusMovim = VOID;
								String str_obserMovim  = VOID;
								
								if (int_grabInf==1) {
									str_obserMovim = "Transaccion a Informix desde Parametros habilitada.";
									if (int_almDestTranInf==1) {
										str_obserMovim += "Transaccion a Informix desde Almacen habilitada.";
										if (int_tranInf==1) {
											str_obserMovim += "Transaccion a Informix desde Motivo habilitada.";
											str_statusMovim = "Realizado";
										} else {
											str_obserMovim += "Transaccion a Informix desde Motivo inhabilitada.";
											str_statusMovim = "Pendiente";
										}
									} else {
										str_obserMovim += "Transaccion a Informix desde Almacen inhabilitada.";
										str_statusMovim = "Pendiente";
									}
								} else {
									str_obserMovim = "Transaccion a Informix desde Parametros inhabilitada.";
									str_statusMovim = "Pendiente";
								}
								
								String str_insertMovEnt =
									"SET    language english "+
									"INSERT INTO movimiento ( "+
									"	      almacen,  "+
									"	      tipo_grano,  "+
									"	      lote,  "+
									"	      fecha,  "+
									"	      cantidad,  "+
									"	      unidad,  "+
									"	      observacion,  "+
									"	      tipo_movimiento,  "+
									"	      ubicacion,  "+
									"	      proveedor,  "+
									"	      grano_daniado, "+
									"	      impureza, "+
									"	      procedencia,  "+
									"	      plaga_viva,  "+
									"	      aflatoxina,  "+
									"	      fecha_analisis,  "+
									"	      temperatura,  "+
									"  	      status_trans, "+
									"	      fecha_trans,  "+
									"	      hora_trans,  "+
									"	      usuario_trans,  "+
									"	      observ_trans,  "+
									"	      mot_baan, "+
									"	      humedad, "+
									"	      ticket_destino "+
									") select "+
									"          "+int_almacenDestino+", "+
									" 	       "+int_idTipoGrano  +", "+
									"	       "+int_idLote       +", "+
									"	      '"+sdf.format( cal_hoy.getTime( ) )+"', "+
									"	       "+(Double.parseDouble( str_peso )*(dbl_porcentaje/100))+", "+
									"	       "+str_unidad       +", "+
									"	      'Movimiento de Sistema', "+
									"	       "+int_idMov        +", "+
									"	      '"+str_ubicacion    +"', "+
									"	      proveedor              , "+
									"	      '"+str_grano_daniado +"', "+
									"	      '"+str_impureza     +"', "+
									"	      '"+str_codigoOrigen+"', "+
									"	      '"+str_plaga_viva    +"', "+
									"	      '"+str_aflatoxina   +"', "+
									"	       "+( cal_FechaA!=null?"'"+sdf.format(cal_FechaA.getTime())+"'":"null" )+", "+
									"	      '"+str_temperatura  +"', "+
									"	      '"+str_statusMovim  +"', "+
									"	      '"+sdf.format( cal_hoy.getTime( ) )+"', "+
									"	      '"+sdfHoras.format( cal_hoy.getTime( ) )+"', "+
									"	      '"+str_usuario      +"', "+
									"	      '"+str_obserMovim   +"', "+
									"	      '"+str_codigoLote   +"', "+
									"	      '"+str_humedad      +"', "+
									"	      '"+str_ticket       +"'  "+
									" from    lote            "+
									"         left join compra on id_comp = compra "+
									" where   id_lote = "+int_idLote+" ";

								stmt_guardarEntrada.addBatch( str_insertMovEnt );
								/**
								 * Fin Agregar movimiento de entrada
								 */
								
								
								
								/**
								 * Reduce la cantidad de tolvas que hay en escape o patio
								 */
								String str_tolvasPatio =
									" SELECT  almacen    "+
									" FROM    alm_escape "+
									" WHERE   almacen  = "+int_almacenDestino+" AND "+
									"         unidades_esc > 0";
								java.sql.Statement stmt_tolvasPatio = ConnRs.createStatement( );
								java.sql.ResultSet rs_tolvasPatio   = stmt_tolvasPatio.executeQuery( str_tolvasPatio );
								
								String str_updateEscapePatio = VOID;
								if( rs_tolvasPatio.next() ){
									str_updateEscapePatio = 
										" UPDATE alm_escape                      "+
										" SET    unidades_esc = unidades_esc - 1 "+
										" WHERE  almacen      = "+int_almacenDestino;
								}else{
									str_updateEscapePatio = 
										" UPDATE alm_patio                           "+
										" SET    unidades_patio = unidades_patio - 1 "+
										" WHERE  almacen        = "+int_almacenDestino;
								}

								stmt_guardarEntrada.addBatch( str_updateEscapePatio );
								/**
								 * Reduce la cantidad de tolvas que hay en escape o patio
								 *	Fin de transacciones en sql server 
								 */
								
								/**
								 * Inicio de transacciones en informix
								 */
								if (int_grabInf==1 && int_almDestTranInf==1 && int_tranInf==1 ) {
									java.sql.Statement stmt_guardarEntradaInf = ConnRsInf.createStatement();
									
									/**
									 * Obtiene Inf de Ubicacion de grano-almacen destino
									 */
									String str_InfUbicDest =
										" SELECT inf_ubicacion , "+
										"        inf_almacen   , "+
										"        inf_compania    "+
										" FROM   almacen       , "+
										"        almtg_capac     "+
										" WHERE  id_almacen = almacen and "+
										"        almacen    =  "+int_almacenDestino+" AND "+
										"        tipo_grano =  "+int_idTipoGrano   +" AND "+
										"        almtg_capac.ubicacion  = '"+( int_almDestInvUbic==0?VOID:str_ubicacion )+"'";
									
									java.sql.Statement stmt_InfUbicDest = ConnRs.createStatement( );
									java.sql.ResultSet rs_InfUbicDest   = stmt_InfUbicDest.executeQuery( str_InfUbicDest );
									
									String str_AlmInfUbicacion =  VOID;
									String str_AlmInfAlmacen   =  VOID;
									String str_AlmInfCompania  = "0";
									
									if( rs_InfUbicDest.next() ){
										str_AlmInfUbicacion = rs_InfUbicDest.getString("inf_ubicacion");
										str_AlmInfUbicacion = str_AlmInfUbicacion!=null?str_AlmInfUbicacion:VOID;
										
										str_AlmInfAlmacen   = rs_InfUbicDest.getString("inf_almacen");
										str_AlmInfAlmacen   = str_AlmInfAlmacen!=null?str_AlmInfAlmacen:VOID;
										
										str_AlmInfCompania = rs_InfUbicDest.getString("inf_compania");
										str_AlmInfCompania = str_AlmInfCompania!=null && !str_AlmInfCompania.equals(VOID)?str_AlmInfCompania:"0";
									}
									rs_InfUbicDest.close();
									stmt_InfUbicDest.close();
									/**
									 * Fin Obtiene Inf de Ubicacion de grano-almacen destino
									 */
									
									
									/**
									 * Obtiene y actualiza El Contador Informix 
									 */
									String str_ContInf =
										" SELECT cont              "+
										" FROM   contador_informix ";
									
									java.sql.Statement stmt_ContInf = ConnRs.createStatement( );
									java.sql.ResultSet rs_ContInf   = stmt_ContInf.executeQuery( str_ContInf );
									
									String str_actualizaContInf = VOID;
									
									if( rs_ContInf.next( ) ){
										str_actualizaContInf = 
											" update contador_informix "+
											" set 	 cont = (select isnull(cont+1,1) from contador_informix) ";
									}else{
										str_actualizaContInf = 
											" insert into contador_informix values (1) ";
									}
									stmt_guardarEntrada.addBatch( str_actualizaContInf );
									/**
									 * Fin Obtiene y actualiza El Contador Informix 
									 */
									
									Parametro par = new Parametro(ConnRs.createStatement());
									KC.cimaV2.Unidad unidad = KC.cimaV2.Unidad.instancia(ConnRs.createStatement(), par, Integer.parseInt(str_unidad) );
									unidad.setUbicacion( ubicacion );
									unidad.setPesoDestino( Double.parseDouble( str_peso ) );
									unidad.setTicket( str_ticket );
									unidad.setHumedadDestino( Double.parseDouble( str_humedad ) );
									unidad.setObservDest( str_observ );
									unidad.setFechaRecepcion( cal_recepcion );
									String str_tmp = RunMovimientoInformix.ejecutar(stmt_guardarEntradaInf, par,unidad);
									if( str_tmp.indexOf( "Error" ) == -1 ){
										stmt_guardarEntradaInf.executeBatch( );
									}else{
										throw new Exception( str_tmp);
									}
								}
								stmt_guardarEntrada.executeBatch( );
								/**
								 * fin de transacciones en informix
								 */
								ConnRs.commit( );
								ConnRsInf.commit( );
								status  = 2;
									if(cambioGrano){
										mensaje = "Se cambio tipo de grano en silo destino!";
									}else {
										mensaje = "Unidad recepcionada con exito!";
									}
								}else { 
									/**
									 * if se cambio el tipo de grano correctamente 
									 */
																					
									status = 1;
								}
							}catch( Exception ex ){
								status  = 1;						
								mensaje = "Error: <"+ex.getMessage( )+"!";
								ConnRs.rollback( );
								try{ ConnRsInf.rollback(); }catch(java.sql.SQLException sqlex){};
							}
						}else{
							/**
							 * Fin if (str_recepcion!=null && !str_recepcion.equals(VOID) && str_ticket!=null && !str_ticket.equals(VOID) && str_peso!=null && !str_peso.equals(VOID) && str_unidad!=null && !str_unidad.equals(VOID)) { 
							 */
							status  = 0;
							mensaje = "Unidad no capturada!";
						}
					}else{
						str_ticket    = str_ticketDestino;
						str_ubicacion = str_ubicacionDestino;
						str_peso      = String.valueOf(dbl_pesoDestino);
						str_humedad   = str_humedadDestino;
						status  = 1;
						mensaje = "Error: Unidad ya recepcionada!";
					}
					/**
					 * Fin if( str_ticketDestino == null || str_ticketDestino.equals(VOID) ){ 
					 */
					
				}else{
					status  = 1;
					mensaje = "Error: No hay datos de la unidad!";
				}
				/**
				 *	Fin if( rs_datUnidad.next( ) ){ 
				 */
				rs_datUnidad.close();
				stmt_datUnidad.close();
				
				cal_recepcion = null;
				cal_FechaA    = null;
				
				str_msg +=mensaje;
				
				map_unidad.put("mensaje", mensaje);
				arrL_retVal.add(map_unidad);
			}
			/**
			 * Fin while( lit_unidades.hasNext())
			 */
		}else{
			return arrL_retVal;
		}
		return arrL_retVal;
	}
}
